<?php
require 'System/Forms/BedrijfFormStep1.php';
require 'System/Forms/BedrijfFormStep2.php';

class BedrijfController extends Controller
{
	protected $requiresAuthentication = true;
	
	/**
	 * 
	 * @see Controller::defaultAction()
	 */
	public function defaultAction()
	{
		$view = new HTMLView( 'BedrijfController/Overview', $this->getSmarty() );
		$view->assign( 'bedrijven', Bedrijf::find('all') );
		
		$this->getViewManager()->push( $view );
	}
	
	public function createAction()
	{
		$this->showForm( );
	}
	
	public function editAction()
	{
		if( isset( $_GET['id'] ) )
		{
			$bedrijf = Bedrijf::find( $_GET['id'] );

			if( $bedrijf == null )
			{
				throw new Exception('Bedrijf with id ' . $_GET['id'] . ' was not found.');
			}
				
			$this->showForm( $bedrijf );
		}
		else
		{
			$this->defaultAction();
		}
	}
	
	public function showForm( Bedrijf $data = null )
	{
		$attributes = array();
		
		if( $data != null )
		{
			$attributes = $data->getAttributes();
			$view = new HTMLView( 'BedrijfController/Edit', $this->getSmarty() );
			$view->assign( 'docent', $data );
		}
		else
		{
			$view = new HTMLView( 'BedrijfController/Create', $this->getSmarty() );
		}
		
		if( !isset( $_SESSION['company_step'] ) || $_SESSION['company_step'] == 1 )
		{
			$this->form_Step1( $view, $attributes );
		}
		elseif( $_SESSION['company_step'] == 2 )
		{
			$this->form_Step2( $view, $attributes );
		}
		else
		{
			$this->form_ViewConfirmation();
		}
	}
	
	private function form_Step1( View $view, $data = array(), $delay = false )
	{
		$bedrijf = new BedrijfFormStep1( $_SERVER['REQUEST_METHOD'] == 'POST' && !$delay ? $_POST : $data );
		
		$view->assignArray( array( 'form' => $bedrijf, 'step' => 1 ) );

		$this->getViewManager()->remove( $view );
		$this->getViewManager()->push( $view );
				
		if( !$delay && $_SERVER['REQUEST_METHOD'] == 'POST' && $bedrijf->isValid() )
		{
			$_SESSION['company_temp'] = new Bedrijf( $_POST );
			
			// Show step 2
			$_SESSION['company_step'] = 2;
			$this->form_Step2( $view, $data, true );
			//$this->form_ViewConfirmation( $bedrijf );
			return;
		}
	}
	
	private function form_Step2( View $view, $data = array(), $delay = false )
	{
		$bedrijf = new BedrijfFormStep2( $_SERVER['REQUEST_METHOD'] == 'POST' && !$delay ? $_POST : $data );
		
		$view->assignArray( array( 'form' => $bedrijf, 'step' => 1 ) );

		$this->getViewManager()->remove( $view );
		$this->getViewManager()->push( $view );
			
		if( !$delay && $_SERVER['REQUEST_METHOD'] == 'POST' )
		{
			if( isset( $_POST['previous'] ) )
			{
				$_SESSION['company_step'] = 1;
				$this->form_Step1( $view, $_SESSION['company_temp']->getAttributes(), true );
				return;
			}
			elseif( $bedrijf->isValid() )
			{
				$_SESSION['company_temp']->update( $_POST );
				
				// Show step 2
				$this->form_ViewConfirmation( $_SESSION['company_temp'] );
				unset( $_SESSION['company_temp'] );
				return;
			}
		}
	}
	
	private function form_ViewConfirmation( Bedrijf $bedrijf )
	{
		header('Location: ?c=bedrijf&a=detail&id=' . $bedrijf->getSugarId() . '&added=true');
	}
	
	public function detailAction()
	{
		if( isset( $_GET['id'] ) )
		{
			$bedrijf = Bedrijf::find( $_GET['id'] );

			if( $bedrijf == null )
			{
				throw new Exception('Bedrijf with id ' . $_GET['id'] . ' was not found.');
			}

			$view = new HTMLView( 'BedrijfController/Detail', $this->getSmarty() );
			$view->assign( 'bedrijf', $bedrijf );
			$view->assign( 'labels', Bedrijf::getField('*') );
			$this->getViewManager()->push( $view );
			
			$bedrijfsbegeleiderView = new HTMLView( 'BedrijfsbegeleiderController/Overview', $this->getSmarty() );
			$view->assign( 'begeleiders', Bedrijfsbegeleider::find('all', array( 'query' => 'company_id LIKE \'' . $bedrijf->getSugarId() . '\'' )) );
			$view->assign( 'bedrijf', $bedrijf );
		
			$this->getViewManager()->push( $bedrijfsbegeleiderView );
		}
		else
		{
			$this->defaultAction();
		}
	}
	
	public function deleteAction()
	{
		if( isset( $_GET['id'] ) )
		{
			$bedrijf = Bedrijf::find( $_GET['id'] );

			if( $bedrijf == null )
			{
				throw new Exception('Bedrijf with id ' . $_GET['id'] . ' was not found.');
			}

			$bedrijf->delete();
		}
		
		$this->defaultAction();
	}
}